Web Server (Web 服务器) 开发通常是指 Web 后端服务开发。
除了直接利用 Node.js 内置的 http
开发外,还可以使用社区中已经封装好的 Node.js 开发框架,来提高开发效率。
下面是业界里较出名的一些 Node.js 框架。
国外: * NestJS:用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架; * Express:高度包容、快速而极简的 Node.js Web 框架; * Koa:基于 Node.js 平台的下一代 web 开发框架; * fastify:快速并且低开销的 web 框架,专为 Node.js 平台量身打造。
国内 (都是阿里出品): * Egg:Egg.js 为企业级框架和应用而生; * Midway:Node.js 框架,通过自研的依赖注入容器,搭配各种上层模块,组合出适用于不同场景的解决方案。
其它当下还比较小众的: * hono:小巧、简单且超快的 Web 框架,支持在任何 JS 运行时上运行; * Deepkit:高性能 TypeScript 框架,适用于企业级 TypeScript 应用程序开发。
其中 NestJS, Egg, Midway
都是非常适合开发大型项目的,内置了许多开箱即用的能力和解决方案。
其它的框架都是比较轻量级的,适合个人/小团队开发小型项目,利用社区生态中提供的丰富功能插件完成应用开发。
接下来再简单介绍一下 HTTP基础知识
和 RESTful API
,就开始使用 express 实践开发一个简单的 Web Server 实现资源的 CRUD
操作。
超文本传输协议 (HyperText Transfer Protocol))。
在 Web 应用网络通信中,最常用的网络协议。
这里简单介绍一下 HTTP 中的 请求方法
和 URL
相关知识,更多细节可移步 MDN 文档:HTTP。
请求方法分为很多种,但最常用的也就是 Get
和 Post
。
虽然请求方法有很多,但是更多的是传达一个语义,而不是说 Post 能做的事情 Get 就不能做了。
下面是简单的介绍 (主要关注前 5 个就行)。
| 方法 | 常用场景 |
| ------- | ---------------------------------------------------------------------------- |
| GET | 用于获取资源,如网页、图片等数据。GET 请求通常不会对服务器资源进行修改 |
| POST | 用于向服务器提交数据,通常会对服务器进行修改。常用于表单提交、注册、登录场景 |
| PUT | 更新服务器上的资源。通常用于更新或替换已有的资源 |
| DELETE | 通常用于删除服务器上的资源 |
| OPTIONS | 用于获取与资源相关的选项,如允许的请求方法、代理等。通常用于跨域请求的预检 |
| PATCH | 用于对资源进行局部修改。常用于更新资源的部分属性 |
| HEAD | 类似于 GET 请求,但不返回响应体。常用于检查资源的元数据,如长度、类型等。 |
| CONNECT | 用于建立一个 TCP/IP 隧道到另一个服务器,如 WebSocket
场景。 |
| TRACE | 用于调试信息。通常用于开发和测试场景。 |
sh
scheme://host:port/path?query
| 名称 | 含义 |
| ------ | -------------------------------- |
| scheme | 协议(HTTP/HTTPS/FTP..) |
| host | 主机名(通常说的域名或ip) |
| port | 端口号(默认HTTP 80,HTTPS 443) |
| path | 资源路径(例如 /hello) |
| query | 用于查询的参数 (?id=1) |
在当下的 Web 开发中,REST (Representational State Transfer) 架构风格被广泛采用。
RESTful API 是一个基于 REST 架构风格构建的 Web 服务。
它对数据的操作分别使用 HTTP 协议提供的 GET (获取数据)、POST (添加数据)、PUT (更新数据)、DELETE (删除数据) 等方法来表示。
同时还可以配合路由传参,来编写更加语义化的 API。
下面是一组例子。
| 方法 | 路径 | 描述 | | ------ | -------------- | -------------------------------------------------- | | GET | /api/users | 获取所有用户信息 | | GET | /api/users/:id | 根据用户ID获取用户信息 | | POST | /api/users | 创建新用户,请求体包含新用户的信息 | | PUT | /api/users/:id | 根据用户ID更新用户信息,请求体包含更新后的用户信息 | | DELETE | /api/users/:id | 根据用户ID删除用户信息 |
接下来我们将使用 express 来实现一个简单的 Web Server,同时实现上面的这组 API
本节介绍了 Web Server 开发相关的一些理论知识,包括 HTTP 基础知识、RESTful API 等。
同时也简单介绍了一些国内外流行的 Node.js Web 框架,其中 NestJS, Egg, Midway
等是最适合开发大型项目的,Express,Koa
适合中小型项目。